﻿#define _CRT_SECURE_NO_WARNINGS 1

#include <iostream>

using namespace std;

int main()
{
    long long T;
    cin >> T;

    while (T--)
    {
        long long n, a, b;
        cin >> n >> a >> b;

        if (n <= 2)//特殊情况处理
        {
            cout << min(a, b) << endl;
            continue;
        }

        long long result = 0;
        if (3 * a < 2 * b)//相同的人，租用双人船和三人船的费用比较
        {
            //租用双人船便宜，所以尽可能租用双人船
            result = n / 2 * a;//需要多少辆双人船
            n %= 2;//查看是否剩下一人
            if (n)
                result += min(min(a, b), b - a);//剩下一人租用双人船或者三人船或者叫两个已经租双人船的人来一起租三人船,b-a，a表示租的最后一辆双人船，b-a表示换成三人船的差额，可能是负数，不是三人船更便宜
        }
        else
        {
            result = n / 3 * b;//尽可能租三人船
            n %= 3;
            if (n == 1)//剩下一人
                result += min(min(a, b), 2 * a - b);//租一辆双人船或者三人船或者退一只已经租的三人船，换成两辆双人船
            if (n == 2)
                result += min(min(a, b), 3 * a - b);//租一辆双人船或者三人船或者退一只已经租的三人船，换成三辆双人船
        }

        cout << result << endl;
    }

    return 0;
}

/*
链接：https://ac.nowcoder.com/acm/problem/219035
来源：牛客网

题目描述
盼望着，盼望着，东风来了，春天脚步近了。
值此大好春光，老师组织了同学们出去划船，划船项目收费如下：
双人船最多坐两人，也可以坐一人，收费a元三人船最多坐三人，
也可以坐两人或者一人，收费b元

本次出游加上带队老师共n人，如何安排能使得花费最小呢？
输入描述:
第一行给出一个正整数T(1≤T≤1000)，代表测试数据的组数。
接下来T行每行给出三个正整数n,a,b,1≤n,a,b≤10^9，含义如题。
输出描述:
每组输入输出一行，代表最小的花费

示例1
输入
2
2 20 200
3 20 20
输出
20
20
*/

